/**
 * 给定一个按照升序排列的整数数组 nums，和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
 * 如果数组中不存在目标值 target，返回 [-1, -1]。
 * 示例 1：
 * 输入：nums = [5,7,7,8,8,10], target = 8
 * 输出：[3,4]

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

 /**
  * 
  * @param {number[]} nums 
  * @param {number} target 
  */

//   这里理解错题意了, 不是看target的相对位置, 而是看nums里面有没有这个. 
var searchRange = function(nums, target) {
    let i = 0;j = nums.length;
    while(i < j){
        if(target >= nums[i] && target <= nums[i+1]){
            return [i, i+1] 
        }else {
            i ++ 
        }
    }
    return [-1, -1]
};

let nums = [1, 2, 3, 4, 5, 6, 7, 8,8, 9,10]
const res = searchRange(nums, 5)
// console.log(res);



// 时间复杂度O(n)
var searchRange1 = function(nums, target) {
    let i = 0;j = nums.length;result = []
    while(i < j){
        if(target == nums[i]){
            result.push(i)
        }
        i ++ 
    }
    // 看是否有满足条件的, 如果有, 返回, 否则返回[-1, -1]
    return result.length ? result : [-1, -1]
};


const res1 = searchRange1(nums, 8)
console.log(res1);


// 努努力, 将时间复杂度变为O(logn), 就需要使用二分了
var searchRange2 = function(nums, target) {
    let low = 0; high = nums.length -1 
    let res = []
    while(low < high) {      
        let mid = (low + high)/2
        if(nums[mid] === target) {
            return mid 
        } else if(nums[mid] > target) {
            high = mid - 1
        }else {
            low = mid + 1 
        }
    }
    return -1
    
}

const result1 = searchRange2(nums, 8)
// console.log(result1);
